/*
 *    This program is free software; you can redistribute it and/or modify
 *    it under the terms of the GNU General Public License as published by
 *    the Free Software Foundation; either version 2 of the License, or
 *    (at your option) any later version.
 *
 *    This program is distributed in the hope that it will be useful,
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *    GNU General Public License for more details.
 *
 *    You should have received a copy of the GNU General Public License
 *    along with this program; if not, write to the Free Software
 *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 *    2010 year
 *    Author: Michael Khromov aka MikeDM (Mike D'Morto)
 *    E-Mail: mikedmorto@gmail.com
 */
#ifndef TSPL_LOGIN_STD_MNG_H
#define TSPL_LOGIN_STD_MNG_H

#define PLUGIN_NAME "login_std_mng"

#include <QObject>
#include <QtCore/QtPlugin>
#include <QtSql>
#include <QDebug>
#include "iface_wrkplugin.h"
#include "dloginstdmng.h"



class Tspl_login_std_mng : public TsIfaceWrkPlugin
{
    Q_OBJECT
    Q_INTERFACES(TsIfaceWrkPlugin)
public:
        virtual ~Tspl_login_std_mng(){};
        // метод выполняющий инициализацию плагина
        virtual bool qinit(const QString & cfgstr, const QString & lang,
                           const QString & curruser,const QString & filebase,
                           QList<TsIfaceWrkPlugin*> * pllist);
        // главный метод работы плагина. вызывающий его основную функцию.
        // плагины  с ГУИ именно из этого метода вызывают свое главное окно.
        virtual bool qstart();
        virtual QString getName();
private:

        QString mcurruser; // текущий пользователь
        enum State{InitUser=0,InitAdm,ValidUserPassU,ChangePassU,GetAllUsersAdm,
               ChangePassUA};
        // этапы:
        // 1 инициализация в режиме пользователя, 2 инициализация в режиме админа.
        // 3 пришел запрос на смену пароля пользователя в режиме пользователя
        // первый этап это валидация текущего пароля
        // 4 шаг смены пароля пользователю, в режиме пользователя
        // 5 получаем список всех юзверей
        // ChangePassUA - меняем пароль юзверю в админ режиме
        int Step;
        bool mode;
        int id;
        DLoginStdMng * dia;



public slots:
        // слот получения ответа от плагина бд
        void slotDb(const QString & plName , int id , QSqlQuery * ret);
        void slotDbErr(const QString & plName , const QString & errtext);
        // синхронный режим.
        void slotRstartS(const QString pl_name);
        // ответ положительный с данными по запросу.
        void slotFinishS(const QString & plName , QSqlQuery * ret);
        // ответ отрицательный с данными по ошибке
        void slotFinishErrS(const QString & plName , const QString & errtext);
private slots:
        // слоты запроса от диалога
        // пришел запрос на валидацию текущего пароля пользователя, режим пользователя
        void slotChangeUP(const QString & pass);
        // режим админа
        // запрос всех пользователей в системе
        void slotGetAllUsers();
        // запрос смены пользователю пароля, режим админа
        void slotChangeUPA(const QString & pass, const QString & user);
signals:
        // сигнал запроса в базу данных
        void sigQexec(const QString pl_name,const QString & fname,const QList<QVariant> & parameters);
        // сигнал для записи в лог.
        void sigPutLog(const QString & owner,int level,const QString & text);
        void sigClear(int id);

        // синхронный режим
        // первый запрос от плагина на начала синхронного режима.
        void sigQstartS(const QString & pl_name);
        // запрос в базу в асинхронном режиме
        void sigQexecS(const QString pl_name,const QString & fname,const QList<QVariant> & parameters);
        // сигнал окончания работы в синхронном режиме
        void sigQstopS(const QString & pl_name);

};

#endif // TSPL_LOGIN_STD_MNG_H
